/**
 * 用户登录请求DTO
 * 
 * 功能说明：
 * - 封装用户登录请求数据
 * - 支持用户名、邮箱、手机号等多种登录方式
 * - 提供数据验证注解，确保请求数据的有效性
 * 
 * 字段说明：
 * - username：登录用户名，可以是用户名、邮箱或手机号
 * - password：登录密码，明文传输（HTTPS加密保护）
 * 
 * 数据验证：
 * - @NotBlank：确保字段不为null且不为空字符串
 * - message：自定义验证失败时的错误提示信息
 * 
 * 使用场景：
 * - 用户登录：接收前端传来的登录凭证
 * - 身份验证：作为认证服务的输入参数
 * - API文档：用于生成Swagger接口文档的请求参数说明
 * 
 * 安全考虑：
 * - 密码字段需要HTTPS加密传输，防止中间人攻击
 * - 服务端不存储明文密码，只存储BCrypt加密后的哈希值
 * - 支持统一错误处理，避免泄露用户存在性信息
 * 
 * @author eCommerce Team
 * @version 1.0
 */
package com.ecommerce.auth.dto;

import jakarta.validation.constraints.NotBlank;

/**
 * 用户登录请求DTO
 * 封装用户登录请求数据，支持多种登录方式
 */
public class LoginRequest {

    /**
     * 登录用户名
     * - 可以是用户名、邮箱或手机号
     * - 数据库约束：非空
     * - 验证注解：@NotBlank确保不为null且不为空字符串
     * - 错误提示："用户名不能为空"
     */
    @NotBlank(message = "用户名不能为空")
    private String username;

    /**
     * 登录密码
     * - 明文密码，需要HTTPS加密传输
     * - 数据库约束：非空
     * - 验证注解：@NotBlank确保不为null且不为空字符串
     * - 错误提示："密码不能为空"
     * - 安全要求：密码长度和复杂度由前端和服务端共同验证
     */
    @NotBlank(message = "密码不能为空")
    private String password;

    /**
     * 获取用户名
     * @return 用户名/邮箱/手机号
     */
    public String getUsername() {
        return username;
    }

    /**
     * 设置用户名
     * @param username 用户名/邮箱/手机号
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * 获取密码
     * @return 明文密码
     */
    public String getPassword() {
        return password;
    }

    /**
     * 设置密码
     * @param password 明文密码
     */
    public void setPassword(String password) {
        this.password = password;
    }
}